package com.shellyan.realtime;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.atguigu.realtime.gmall.common.Constant;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Shelly An
 * @create 2020/9/2 12:36
 * 给浏览器提供动态页面
 */

@RestController  //  = @Controller +  @ResponseBody
public class PublisherController {
    @PostMapping("/log")
    public String dolog(String log) {
        //1. 添加时间戳
        log = addTs(log);
        //2. 落盘  给离线需求使用 自己的输出流效率低，使用log4j工具（更好的log4j2）
        saveToDisk(log);
        //3. 把数据发送到kafka
        sendToKafka(log);
        return "ok";
    }

    /**
     * 自动注入 对象自动创建
     */
    @Autowired
    KafkaTemplate<String,String> kafka;

    /**
     * 将数据发送到kafka
     *
     * 日志：启动、事件
     * 分别进入不同的topic
     * @param log
     */
    private void sendToKafka(String log) {
        if (log.contains("startup")) {
            kafka.send(Constant.STARTUP_TOPIC,log);
        }else {
            kafka.send(Constant.EVENT_TOPIC,log);
        }
    }

    /**
     * 将日志写入磁盘
     * @param log
     */
    private void saveToDisk(String log) {
        //专门用来写日志的对象
        Logger logger = LoggerFactory.getLogger(PublisherController.class);
        logger.info(log);
    }

    /**
     * 给日志添加时间戳
     * @param log 日志数据
     */
    private String addTs(String log) {
        JSONObject object = JSON.parseObject(log);
        object.put("ts",System.currentTimeMillis());
        return object.toJSONString();
    }
}
